#ifndef NODE_PARSER_H
#define NODE_PARSER_H

#include <tinyxml2/tinyxml2.h>
#include <optional>
#include "object/launch_node.h"

/**
 * @brief:  node解析器，只解析node内容
 */
class NodeParser
{
public:
    NodeParser();
    virtual ~NodeParser();

    /**
     * @brief:  解析launch内部某个node类型
     * @param[in]:  element     launch内部的某个类型为node的元素，不为nullptr
     */
    std::optional<LaunchNode> parser(const tinyxml2::XMLElement *element);

    /**
     * @brief:  解析内部元素
     * @param[in]:  childElement     node内部元素，不为nullptr
     */
    bool parserInner(const tinyxml2::XMLElement *childElement, const std::string &ns);
    bool parserInnerElement(const tinyxml2::XMLElement *childElement, const std::string &ns);

private:

    /**
     * @brief:  从node元素中获取pkg/type/name等attribute
     * @note    element类型必须是node
     */
    static std::optional<NodeInfo> getNodeInfo(const tinyxml2::XMLElement *element);
};


#endif //NODE_PARSER_H
